776e4f7991c4f5637f9a945ed9190a26ff295446,src/com/android/providers/downloads/Helpers.java,Helpers,isFilenameValid,#String#File#,346

Before Change


            return false;
        }

        return filename.startsWith(Environment.getDownloadCacheDirectory().toString())
                || filename.startsWith(downloadsDataDir.toString())
                || filename.startsWith(Environment.getExternalStorageDirectory().toString());
    }

After Change


    /**
     * Checks whether the filename looks legitimate
     */
    static boolean isFilenameValid(String filename, File downloadsDataDir) {
        final String[] whitelist;
        try {
            filename = new File(filename).getCanonicalPath();
            whitelist = new String[] {
                    downloadsDataDir.getCanonicalPath(),
                    Environment.getDownloadCacheDirectory().getCanonicalPath(),
                    Environment.getExternalStorageDirectory().getCanonicalPath(),
            };
        } catch (IOException e) {
            Log.w(TAG, "Failed to resolve canonical path: " + e);
            return false;
        }

        for (String test : whitelist) {
            if (filename.startsWith(test)) {
                return true;
            }
        }

        return false;
    }

    /**